/*
 * @lc app=leetcode.cn id=350 lang=javascript
 *
 * [350] 两个数组的交集 II
 */

// @lc code=start
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
// 排序+双指针
var intersect = function(nums1, nums2) {
  nums1.sort((a,b) => a - b)
  nums2.sort((a,b) => a - b)
  let p1 = 0
  let p2 = 0
  let res = []
  while (p1 < nums1.length && p2 < nums2.length) {
    let p1i = nums1[p1]
    let p2i = nums2[p2]
    if (p1i === p2i) {
      res.push(p1i)
      p1++
      p2++
    } else {
      p1i > p2i ? p2++ : p1++
    }
  }
  return res
};
// @lc code=end
// hash表
// var intersect = function(nums1, nums2) {
//   let map = new Map()
//   let res = []
//   for (const item of nums1) {
//     let m = map.get(item)
//     if (!m) {
//       map.set(item, 1)
//     } else {
//       map.set(item, m + 1)
//     }
//   }
//   for (const item of nums2) {
//     let m = map.get(item)
//     if (m) {
//       res.push(item)
//       map.set(item, m - 1)
//     }
//   }
//   return res
// };